/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * frmVentas.java
 *
 * Created on 19/11/2011, 10:29:46 AM
 */

package Ventas;

import Beans.ClienteBean;
import Beans.FacturaBean;
import Beans.ProductoBean;
import Beans.VendedorBean;
import Beans.VentaBean;
import Blogic.ClienteBLogic;
import Blogic.FacturaBLogic;
import Blogic.ProductoBLogic;
import Blogic.VendedorBLogic;
import Blogic.VentaBLogic;
import Clientes.frmAltadeClientes;
import Producto.frmProducto;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;

/**
 *
 * @author orellana
 */
public class frmVentas extends javax.swing.JFrame {

    // Atributos de la Clase
    // Para la Tabla de Detalle de Venta
    private String colSuc[]={"Codigo","Marca","Producto","Precio","Cantidad","Subtotal","IVA","Total","idProducto"};
    public DefaultTableModel modelDetalleVentas=new DefaultTableModel(colSuc,0);
    // Para los Formularios
    // Buscar Producto
    private frmBusquedaProductos frmBusquedaProductos=new frmBusquedaProductos();
    // Buscar Cliente
    private frmBuscarClienteVentas frmBusCliVentas=new frmBuscarClienteVentas();
    // Agregar Cliente
    private frmAltadeClientes frmAltaClientes=new frmAltadeClientes(1);
    // Agregar Producto
    private frmProducto frmProducto=new frmProducto(1);
    private String idCliente="-1";
    private String idProducto="-1";
    private String productoSel="-1";


    /** Creates new form frmVentas */
    public frmVentas() {
        initComponents();
        // Definimos posicion del formulario
        this.setLocationRelativeTo(null);
        // Definimos el Redimensionamiento
        this.setResizable(false);
        // Definimos cerrado del formulario
        this.setDefaultCloseOperation(HIDE_ON_CLOSE);
        // Definimos el Tamaño de las Columnas (Detalle Venta)
        getTablaDetalleVentas();
        // Definimos el Bloqueo de Celdas
        getBloqueoColumnas();
        // Obtenemos los Vendedores
        obtVendedores();
        // Obtenemos los Valores por Default
        obtValoresDefault();
        // Movemos el Foco
        txtCodigoBarra.requestFocus();
    }

    // Metodos Publicos

    // Metodos Privados
    // Obtenemos el Tamaño de las Columnas (Detalle de Venta)
    private void getTablaDetalleVentas(){
        // Vaciamos el Modelo con los Datos
        tblListaProductos.setModel(modelDetalleVentas);
        // Definimos el Tamaño de las Columnas
        // Codigo
        tblListaProductos.getColumnModel().getColumn(0).setPreferredWidth(140);
        // Marca
        tblListaProductos.getColumnModel().getColumn(1).setPreferredWidth(215);
        // Producto
        tblListaProductos.getColumnModel().getColumn(2).setPreferredWidth(500);
        // Precio
        tblListaProductos.getColumnModel().getColumn(3).setPreferredWidth(100);
        // Cantidad
        tblListaProductos.getColumnModel().getColumn(4).setPreferredWidth(100);
        // Subtotal
        tblListaProductos.getColumnModel().getColumn(5).setPreferredWidth(100);
        // IVA
        tblListaProductos.getColumnModel().getColumn(6).setPreferredWidth(100);
        // Total
        tblListaProductos.getColumnModel().getColumn(7).setPreferredWidth(100);
        // idProducto
        tblListaProductos.getColumnModel().getColumn(8).setMinWidth(0);
        tblListaProductos.getColumnModel().getColumn(8).setMaxWidth(0);
    }

    // Definimos el Bloqueo de Celdas
    private void getBloqueoColumnas(){
        // Codigo
        tblListaProductos.getColumnModel().getColumn(0).setCellEditor(getEditableColumn());
        // Marca
        tblListaProductos.getColumnModel().getColumn(1).setCellEditor(getEditableColumn());
        // Producto
        tblListaProductos.getColumnModel().getColumn(2).setCellEditor(getEditableColumn());
        // Precio
        tblListaProductos.getColumnModel().getColumn(3).setCellEditor(getEditableColumn());
        // Cantidad
        tblListaProductos.getColumnModel().getColumn(4).setCellEditor(getEditableColumn());
        // Subtotal
        tblListaProductos.getColumnModel().getColumn(5).setCellEditor(getEditableColumn());
        // IVA
        tblListaProductos.getColumnModel().getColumn(6).setCellEditor(getEditableColumn());
        // Total
        tblListaProductos.getColumnModel().getColumn(7).setCellEditor(getEditableColumn());
    }
    
    // Obtenemos los Vendedores
    private void obtVendedores(){
        // Variables Locales
        VendedorBean sqlBean=new VendedorBean();
        Vector vendedores=new Vector();

        // Ejectamos la Consulta
        vendedores=(new VendedorBLogic()).getDatosVendedores(sqlBean);
        // Agregamos el Valor por Default
        jcbVendedor.addItem("Seleccione");
        // Vaciamos los Datos
        for (int i=0;i<vendedores.size();i++){
            VendedorBean datoVendedores=new VendedorBean();
            datoVendedores=(VendedorBean) vendedores.elementAt(i);
            // Agregamos los Datos
            jcbVendedor.addItem(datoVendedores.getNombre()+" "+datoVendedores.getPaterno()+" "+datoVendedores.getMaterno());
        }
    }

    // Obtenemos los Valores por Default
    private void obtValoresDefault(){
        // Variables Locale
        ClienteBean sqlBeanCliente=new ClienteBean();
        Vector clientes=new Vector();
        VentaBean sqlBeanVentas=new VentaBean();
        Vector ventas=new Vector();
        FacturaBean sqlBeanFacturas=new FacturaBean();
        Vector facturas=new Vector();

        // Cantidad
        txtCantidad.setText("1");
        // SubTotal
        txtSubtotal.setText("0.00");
        // IVA
        txtIVA.setText("0.00");
        // Total
        txtTotal.setText("0.00");

        // Obtenemos el Cliente por Default
        // Seteamos los Datos
        sqlBeanCliente.setIdCliente("1");
        clientes=(new ClienteBLogic()).getDatosCliente(sqlBeanCliente);
        sqlBeanCliente=(ClienteBean) clientes.elementAt(0);
        // Vaciamos los Datos
        txtNoCliente.setText(sqlBeanCliente.getIdCliente());
        txtNombreCliente.setText(sqlBeanCliente.getNombreCliente());

        // Obtenemos el Numero de Venta
        ventas=(new VentaBLogic()).getIdVentaActual(sqlBeanVentas);
        sqlBeanVentas=(VentaBean) ventas.elementAt(0);
        // Vaciamos los Datos
        txtNoRemision.setText(sqlBeanVentas.getIdVenta());

        // Obtenemos el Numero de Factura
        facturas=(new FacturaBLogic()).getIdFacturaActual(sqlBeanFacturas);
        sqlBeanFacturas=(FacturaBean) facturas.elementAt(0);
        // Vaciamos los Datos
        txtNoFactura.setText(sqlBeanFacturas.getIdFactura());
    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        btnBuscarCliente = new javax.swing.JButton();
        btnAgregarCliente = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        txtNoCliente = new javax.swing.JTextField();
        txtNombreCliente = new javax.swing.JTextField();
        jcbVendedor = new javax.swing.JComboBox();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel2 = new javax.swing.JPanel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        txtCodigoBarra = new javax.swing.JTextField();
        txtCantidad = new javax.swing.JTextField();
        txtSubtotal = new javax.swing.JTextField();
        txtIVA = new javax.swing.JTextField();
        txtTotal = new javax.swing.JTextField();
        btnRealizarVenta = new javax.swing.JButton();
        btnCancelarVenta = new javax.swing.JButton();
        jLabel12 = new javax.swing.JLabel();
        jLabel13 = new javax.swing.JLabel();
        jLabel14 = new javax.swing.JLabel();
        jLabel15 = new javax.swing.JLabel();
        jLabel16 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblListaProductos = new javax.swing.JTable();
        jLabel17 = new javax.swing.JLabel();
        btnAgregar = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        jToolBar1 = new javax.swing.JToolBar();
        btnSalir = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        txtNoFactura = new javax.swing.JTextField();
        txtNoRemision = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(sistemapegasso.SistemaPegassoApp.class).getContext().getResourceMap(frmVentas.class);
        setTitle(resourceMap.getString("Form.title")); // NOI18N
        setName("Form"); // NOI18N

        jPanel1.setBackground(resourceMap.getColor("jPanel1.background")); // NOI18N
        jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, resourceMap.getColor("jPanel1.border.highlightOuterColor"), resourceMap.getColor("jPanel1.border.highlightInnerColor"), resourceMap.getColor("jPanel1.border.shadowOuterColor"), resourceMap.getColor("jPanel1.border.shadowInnerColor"))); // NOI18N
        jPanel1.setName("jPanel1"); // NOI18N

        jLabel2.setFont(resourceMap.getFont("jLabel2.font")); // NOI18N
        jLabel2.setForeground(resourceMap.getColor("jLabel2.foreground")); // NOI18N
        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        jLabel3.setFont(resourceMap.getFont("jLabel3.font")); // NOI18N
        jLabel3.setForeground(resourceMap.getColor("jLabel3.foreground")); // NOI18N
        jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N
        jLabel3.setName("jLabel3"); // NOI18N

        btnBuscarCliente.setBackground(resourceMap.getColor("btnBuscarCliente.background")); // NOI18N
        btnBuscarCliente.setIcon(resourceMap.getIcon("btnBuscarCliente.icon")); // NOI18N
        btnBuscarCliente.setText(resourceMap.getString("btnBuscarCliente.text")); // NOI18N
        btnBuscarCliente.setToolTipText(resourceMap.getString("btnBuscarCliente.toolTipText")); // NOI18N
        btnBuscarCliente.setBorderPainted(false);
        btnBuscarCliente.setContentAreaFilled(false);
        btnBuscarCliente.setFocusable(false);
        btnBuscarCliente.setName("btnBuscarCliente"); // NOI18N
        btnBuscarCliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarClienteActionPerformed(evt);
            }
        });

        btnAgregarCliente.setIcon(resourceMap.getIcon("btnAgregarCliente.icon")); // NOI18N
        btnAgregarCliente.setText(resourceMap.getString("btnAgregarCliente.text")); // NOI18N
        btnAgregarCliente.setToolTipText(resourceMap.getString("btnAgregarCliente.toolTipText")); // NOI18N
        btnAgregarCliente.setBorderPainted(false);
        btnAgregarCliente.setContentAreaFilled(false);
        btnAgregarCliente.setFocusable(false);
        btnAgregarCliente.setName("btnAgregarCliente"); // NOI18N
        btnAgregarCliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarClienteActionPerformed(evt);
            }
        });

        jLabel4.setBackground(resourceMap.getColor("jLabel4.background")); // NOI18N
        jLabel4.setFont(resourceMap.getFont("jLabel4.font")); // NOI18N
        jLabel4.setForeground(resourceMap.getColor("jLabel4.foreground")); // NOI18N
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setText(resourceMap.getString("jLabel4.text")); // NOI18N
        jLabel4.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jLabel4.setName("jLabel4"); // NOI18N
        jLabel4.setOpaque(true);

        jLabel8.setFont(resourceMap.getFont("jLabel8.font")); // NOI18N
        jLabel8.setForeground(resourceMap.getColor("jLabel8.foreground")); // NOI18N
        jLabel8.setText(resourceMap.getString("jLabel8.text")); // NOI18N
        jLabel8.setName("jLabel8"); // NOI18N

        txtNoCliente.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtNoCliente.setText(resourceMap.getString("txtNoCliente.text")); // NOI18N
        txtNoCliente.setEnabled(false);
        txtNoCliente.setName("txtNoCliente"); // NOI18N

        txtNombreCliente.setText(resourceMap.getString("txtNombreCliente.text")); // NOI18N
        txtNombreCliente.setEnabled(false);
        txtNombreCliente.setName("txtNombreCliente"); // NOI18N

        jcbVendedor.setFont(resourceMap.getFont("jcbVendedor.font")); // NOI18N
        jcbVendedor.setName("jcbVendedor"); // NOI18N

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtNoCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(10, 10, 10)
                .addComponent(jLabel8)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtNombreCliente, javax.swing.GroupLayout.DEFAULT_SIZE, 244, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jcbVendedor, javax.swing.GroupLayout.PREFERRED_SIZE, 226, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnBuscarCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnAgregarCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 933, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(txtNoCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel8)
                            .addComponent(txtNombreCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel3)
                            .addComponent(jcbVendedor, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(29, 29, 29))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(btnBuscarCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(btnAgregarCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(21, 21, 21))))
        );

        jTabbedPane1.setFont(resourceMap.getFont("jTabbedPane1.font")); // NOI18N
        jTabbedPane1.setName("jTabbedPane1"); // NOI18N

        jPanel2.setName("jPanel2"); // NOI18N

        jLabel6.setFont(resourceMap.getFont("jLabel6.font")); // NOI18N
        jLabel6.setText(resourceMap.getString("jLabel6.text")); // NOI18N
        jLabel6.setName("jLabel6"); // NOI18N

        jLabel7.setFont(resourceMap.getFont("jLabel7.font")); // NOI18N
        jLabel7.setText(resourceMap.getString("jLabel7.text")); // NOI18N
        jLabel7.setName("jLabel7"); // NOI18N

        jLabel9.setFont(resourceMap.getFont("jLabel9.font")); // NOI18N
        jLabel9.setText(resourceMap.getString("jLabel9.text")); // NOI18N
        jLabel9.setName("jLabel9"); // NOI18N

        jLabel10.setFont(resourceMap.getFont("jLabel10.font")); // NOI18N
        jLabel10.setText(resourceMap.getString("jLabel10.text")); // NOI18N
        jLabel10.setName("jLabel10"); // NOI18N

        jLabel11.setFont(resourceMap.getFont("jLabel11.font")); // NOI18N
        jLabel11.setText(resourceMap.getString("jLabel11.text")); // NOI18N
        jLabel11.setName("jLabel11"); // NOI18N

        txtCodigoBarra.setFont(resourceMap.getFont("txtCodigoBarra.font")); // NOI18N
        txtCodigoBarra.setText(resourceMap.getString("txtCodigoBarra.text")); // NOI18N
        txtCodigoBarra.setName("txtCodigoBarra"); // NOI18N
        txtCodigoBarra.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtCodigoBarraKeyReleased(evt);
            }
        });

        txtCantidad.setFont(resourceMap.getFont("txtCantidad.font")); // NOI18N
        txtCantidad.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtCantidad.setText(resourceMap.getString("txtCantidad.text")); // NOI18N
        txtCantidad.setName("txtCantidad"); // NOI18N
        txtCantidad.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtCantidadKeyReleased(evt);
            }
        });

        txtSubtotal.setFont(resourceMap.getFont("txtSubtotal.font")); // NOI18N
        txtSubtotal.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        txtSubtotal.setText(resourceMap.getString("txtSubtotal.text")); // NOI18N
        txtSubtotal.setEnabled(false);
        txtSubtotal.setName("txtSubtotal"); // NOI18N

        txtIVA.setFont(resourceMap.getFont("txtIVA.font")); // NOI18N
        txtIVA.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        txtIVA.setText(resourceMap.getString("txtIVA.text")); // NOI18N
        txtIVA.setEnabled(false);
        txtIVA.setName("txtIVA"); // NOI18N

        txtTotal.setFont(resourceMap.getFont("txtTotal.font")); // NOI18N
        txtTotal.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        txtTotal.setText(resourceMap.getString("txtTotal.text")); // NOI18N
        txtTotal.setEnabled(false);
        txtTotal.setName("txtTotal"); // NOI18N

        btnRealizarVenta.setBackground(resourceMap.getColor("btnRealizarVenta.background")); // NOI18N
        btnRealizarVenta.setFont(resourceMap.getFont("btnRealizarVenta.font")); // NOI18N
        btnRealizarVenta.setIcon(resourceMap.getIcon("btnRealizarVenta.icon")); // NOI18N
        btnRealizarVenta.setText(resourceMap.getString("btnRealizarVenta.text")); // NOI18N
        btnRealizarVenta.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        btnRealizarVenta.setFocusable(false);
        btnRealizarVenta.setName("btnRealizarVenta"); // NOI18N
        btnRealizarVenta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRealizarVentaActionPerformed(evt);
            }
        });

        btnCancelarVenta.setBackground(resourceMap.getColor("btnCancelarVenta.background")); // NOI18N
        btnCancelarVenta.setFont(resourceMap.getFont("btnCancelarVenta.font")); // NOI18N
        btnCancelarVenta.setIcon(resourceMap.getIcon("btnCancelarVenta.icon")); // NOI18N
        btnCancelarVenta.setText(resourceMap.getString("btnCancelarVenta.text")); // NOI18N
        btnCancelarVenta.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        btnCancelarVenta.setFocusable(false);
        btnCancelarVenta.setName("btnCancelarVenta"); // NOI18N

        jLabel12.setFont(resourceMap.getFont("jLabel12.font")); // NOI18N
        jLabel12.setText(resourceMap.getString("jLabel12.text")); // NOI18N
        jLabel12.setName("jLabel12"); // NOI18N

        jLabel13.setFont(resourceMap.getFont("jLabel13.font")); // NOI18N
        jLabel13.setText(resourceMap.getString("jLabel13.text")); // NOI18N
        jLabel13.setName("jLabel13"); // NOI18N

        jLabel14.setFont(resourceMap.getFont("jLabel14.font")); // NOI18N
        jLabel14.setText(resourceMap.getString("jLabel14.text")); // NOI18N
        jLabel14.setName("jLabel14"); // NOI18N

        jLabel15.setFont(resourceMap.getFont("jLabel15.font")); // NOI18N
        jLabel15.setText(resourceMap.getString("jLabel15.text")); // NOI18N
        jLabel15.setName("jLabel15"); // NOI18N

        jLabel16.setFont(resourceMap.getFont("jLabel16.font")); // NOI18N
        jLabel16.setText(resourceMap.getString("jLabel16.text")); // NOI18N
        jLabel16.setName("jLabel16"); // NOI18N

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        tblListaProductos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        tblListaProductos.setName("tblListaProductos"); // NOI18N
        tblListaProductos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblListaProductosMouseClicked(evt);
            }
        });
        tblListaProductos.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tblListaProductosKeyReleased(evt);
            }
        });
        jScrollPane1.setViewportView(tblListaProductos);

        jLabel17.setFont(resourceMap.getFont("jLabel17.font")); // NOI18N
        jLabel17.setText(resourceMap.getString("jLabel17.text")); // NOI18N
        jLabel17.setName("jLabel17"); // NOI18N

        btnAgregar.setBackground(resourceMap.getColor("btnAgregar.background")); // NOI18N
        btnAgregar.setFont(resourceMap.getFont("btnAgregar.font")); // NOI18N
        btnAgregar.setIcon(resourceMap.getIcon("btnAgregar.icon")); // NOI18N
        btnAgregar.setText(resourceMap.getString("btnAgregar.text")); // NOI18N
        btnAgregar.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        btnAgregar.setFocusable(false);
        btnAgregar.setName("btnAgregar"); // NOI18N
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1153, Short.MAX_VALUE)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel6)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup()
                        .addComponent(txtCodigoBarra, javax.swing.GroupLayout.PREFERRED_SIZE, 252, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel7)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtCantidad, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnAgregar, javax.swing.GroupLayout.DEFAULT_SIZE, 122, Short.MAX_VALUE)
                        .addGap(12, 12, 12)
                        .addComponent(btnRealizarVenta, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnCancelarVenta, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel9))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel14)
                                    .addComponent(jLabel15))
                                .addGap(11, 11, 11))
                            .addComponent(jLabel12, javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel13, javax.swing.GroupLayout.Alignment.LEADING))
                        .addGap(47, 47, 47)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel16)
                            .addComponent(jLabel17))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 627, Short.MAX_VALUE)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel11, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel10, javax.swing.GroupLayout.Alignment.TRAILING))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txtTotal, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE)
                    .addComponent(txtIVA, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE)
                    .addComponent(txtSubtotal, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 294, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtCodigoBarra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel6)
                    .addComponent(jLabel7)
                    .addComponent(txtCantidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtSubtotal, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel9)
                    .addComponent(btnCancelarVenta, javax.swing.GroupLayout.DEFAULT_SIZE, 36, Short.MAX_VALUE)
                    .addComponent(btnRealizarVenta, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnAgregar, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel10)
                            .addComponent(txtIVA, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(txtTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel11)))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel12)
                            .addComponent(jLabel16))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel13)
                            .addComponent(jLabel17))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel14)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel15)))
                .addGap(146, 146, 146))
        );

        jTabbedPane1.addTab(resourceMap.getString("jPanel2.TabConstraints.tabTitle"), jPanel2); // NOI18N

        jLabel5.setBackground(resourceMap.getColor("jLabel5.background")); // NOI18N
        jLabel5.setFont(resourceMap.getFont("jLabel5.font")); // NOI18N
        jLabel5.setForeground(resourceMap.getColor("jLabel5.foreground")); // NOI18N
        jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel5.setText(resourceMap.getString("jLabel5.text")); // NOI18N
        jLabel5.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jLabel5.setName("jLabel5"); // NOI18N
        jLabel5.setOpaque(true);
        jLabel5.setPreferredSize(new java.awt.Dimension(69, 20));

        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);
        jToolBar1.setName("jToolBar1"); // NOI18N

        btnSalir.setIcon(resourceMap.getIcon("btnSalir.icon")); // NOI18N
        btnSalir.setText(resourceMap.getString("btnSalir.text")); // NOI18N
        btnSalir.setToolTipText(resourceMap.getString("btnSalir.toolTipText")); // NOI18N
        btnSalir.setBorderPainted(false);
        btnSalir.setContentAreaFilled(false);
        btnSalir.setFocusable(false);
        btnSalir.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnSalir.setName("btnSalir"); // NOI18N
        btnSalir.setPreferredSize(new java.awt.Dimension(36, 36));
        btnSalir.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalirActionPerformed(evt);
            }
        });
        jToolBar1.add(btnSalir);

        jLabel1.setBackground(resourceMap.getColor("jLabel1.background")); // NOI18N
        jLabel1.setFont(resourceMap.getFont("jLabel1.font")); // NOI18N
        jLabel1.setForeground(resourceMap.getColor("jLabel1.foreground")); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jLabel1.setName("jLabel1"); // NOI18N
        jLabel1.setOpaque(true);

        txtNoFactura.setFont(resourceMap.getFont("txtNoFactura.font")); // NOI18N
        txtNoFactura.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtNoFactura.setText(resourceMap.getString("txtNoFactura.text")); // NOI18N
        txtNoFactura.setEnabled(false);
        txtNoFactura.setName("txtNoFactura"); // NOI18N

        txtNoRemision.setFont(resourceMap.getFont("txtNoRemision.font")); // NOI18N
        txtNoRemision.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtNoRemision.setText(resourceMap.getString("txtNoRemision.text")); // NOI18N
        txtNoRemision.setEnabled(false);
        txtNoRemision.setName("txtNoRemision"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 1185, Short.MAX_VALUE)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(txtNoRemision)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtNoFactura, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE))
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1161, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(txtNoRemision, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtNoFactura, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 479, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnBuscarClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarClienteActionPerformed
        // TODO add your handling code here:
        // Cargamos el formulario buscar cliente
        frmBuscarClienteVentas buscarCliente=new frmBuscarClienteVentas();
        // Mostramos el formulario
        buscarCliente.setVisible(true);
    }//GEN-LAST:event_btnBuscarClienteActionPerformed

    private void btnAgregarClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarClienteActionPerformed
        // TODO add your handling code here:
        // Cargamos el formulario alta de clientes
        frmAltadeClientes altaCliente=new frmAltadeClientes(1);
        // Mostramos el formulario
        altaCliente.setVisible(true);
    }//GEN-LAST:event_btnAgregarClienteActionPerformed

    private void btnRealizarVentaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRealizarVentaActionPerformed
        // TODO add your handling code here:
        // Cargamos el formulario de realizar pago (Venta)
        frmRealizarPago realizarPago=new frmRealizarPago();
        // Mostramos el formulario
        realizarPago.setVisible(true);
    }//GEN-LAST:event_btnRealizarVentaActionPerformed

    private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalirActionPerformed
        // TODO add your handling code here:
        // Cerramos el formulario
        this.setVisible(false);
    }//GEN-LAST:event_btnSalirActionPerformed

    private void txtCodigoBarraKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCodigoBarraKeyReleased
        // TODO add your handling code here:
        System.out.println(evt.getKeyCode());
        // Para [F2] Agregar Cliente
        if (evt.getKeyCode()==113){
            // Cargamos el Formulario (Alta de Clientes)
            frmAltaClientes.setVisible(true);
        }

        // Para [F3] Buscar Producto
        if (evt.getKeyCode()==114){
            // Limpiamos el Formulario
            frmBusquedaProductos.limpiaCampos();
            // Cargamos el Formulario (Busqueda de Productos)
            frmBusquedaProductos.setVisible(true);
            // Asignamos Funcionalidad de Boton (frmBusquedaProductos)
            frmBusquedaProductos.btnAceptar.setActionCommand("btnAceptar");
            frmBusquedaProductos.btnAceptar.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    // Realizamos la Accion del Boton
                    if (e.getActionCommand().equals("btnAceptar")){
                        // Vaciamos el Resultado
                        idProducto=frmBusquedaProductos.getIdProductoSel();
                        // Vaciamos el Codigo del Producto
                        txtCodigoBarra.setText(frmBusquedaProductos.getCodigoProducto());
                        // Movemos el Foco
                        txtCantidad.requestFocus();
                    }
                }
            });

        }

        // Para [F4] Buscar Cliente
        if (evt.getKeyCode()==115){
            // Limpiamos el Formulario
            frmBusCliVentas.limpiaCampos();
            // Cargamos el Formulario (Busqueda de Clientes)
            frmBusCliVentas.setVisible(true);
            // Asigamos Funcionalidad de Boton (frmBusCliVentas)
            frmBusCliVentas.btnAceptar.setActionCommand("btnAceptar");
            frmBusCliVentas.btnAceptar.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    // Realizamos la Accion del Boton
                    if (e.getActionCommand().equals("btnAceptar")){
                        // Vaciamos el Resultado
                        idCliente=frmBusCliVentas.getIdClienteSel();
                        // Vaciamos el Codigo del Cliente
                        txtNoCliente.setText(frmBusCliVentas.getCodigoCliente());
                        // Vaciamos el Nombre el Cliente
                        txtNombreCliente.setText(frmBusCliVentas.getNombreCliente());
                    }
                }
            });
        }

        // Para [F7] Agregar Producto
        if (evt.getKeyCode()==118){
            // Cargamos el Formulario (Alta de Productos)
            frmProducto.setVisible(true);
        }

        // Para [Enter]
        if (evt.getKeyCode()==10){
            // Movemos el Foco
            txtCantidad.requestFocus();
        }
    }//GEN-LAST:event_txtCodigoBarraKeyReleased

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        // TODO add your handling code here:
        // Variables Locales
        int find=0;

        // Evaluacion de Campos
        if (txtCodigoBarra.getText().equalsIgnoreCase("")){
            // Mesnaje al Usuario
            JOptionPane.showMessageDialog(null,"Debe Ingresar el codigo de barras","Ventas",JOptionPane.INFORMATION_MESSAGE);
        }else if (txtCantidad.getText().equalsIgnoreCase("")){
            // Mensaje al Usuario
            JOptionPane.showMessageDialog(null,"Debe Ingresar la cantidad","Ventas",JOptionPane.INFORMATION_MESSAGE);
        }else if (Integer.parseInt(txtCantidad.getText())<=0){
            // Mensaje al Usuario
            JOptionPane.showMessageDialog(null,"La cantidad debe ser mayor o igual a 1");
        }else if (!isNumber(txtCantidad.getText())){
            // Mensaje al Usuario
            JOptionPane.showMessageDialog(null,"El valor de cantidad debe ser numerico","Ventas",JOptionPane.INFORMATION_MESSAGE);
        }else{
            // Evaluamos si el Producto Existe en la Venta
            // Ciclo FOR
            for (int i=0;i<tblListaProductos.getRowCount();i++){
                if (tblListaProductos.getValueAt(i, 8).toString().equalsIgnoreCase(idProducto)){
                    // Actualizamos el Registro del Producto
                    actProductoVenta(i);
                    // Actualizamos el Valor
                    find=1;
                    // Salimos del Ciclo
                    i=tblListaProductos.getRowCount();
                }
            }

            // Evaluamos si el Producto Existe en la Venta
            if (find==0){
                // Agregamos Producto a la Venta
                addProductoVenta();
            }
        }
    }//GEN-LAST:event_btnAgregarActionPerformed

    private void tblListaProductosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblListaProductosMouseClicked
        // TODO add your handling code here:
        productoSel=tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),8).toString();
    }//GEN-LAST:event_tblListaProductosMouseClicked

    private void tblListaProductosKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tblListaProductosKeyReleased
        // TODO add your handling code here:
        // Para [+] Sumar Mas Producto
        if (evt.getKeyCode()==107){
            // Agregamos Otra Unidad a la Venta
            masProductoVenta();
        }

        // Para [-] Restar Producto
        if (evt.getKeyCode()==109){
            // Quitamos Otra Unidad a la Venta
            menosProductoVenta();
        }

        // Para [Eliminar] un Producto
        if (evt.getKeyCode()==127){
            // Eliminamos el Producto de la Venta
            quitarProductoVenta();
        }
    }//GEN-LAST:event_tblListaProductosKeyReleased

    private void txtCantidadKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCantidadKeyReleased
        // TODO add your handling code here:
        // Para [Enter]
        if (evt.getKeyCode()==10){
            // Agregamos el Producto a la Venta
            btnAgregar.doClick();
        }
    }//GEN-LAST:event_txtCantidadKeyReleased

    // Para Eliminar un Producto de la Venta
    private void quitarProductoVenta(){
        // Quitamos el Producto del Modelp
        modelDetalleVentas.removeRow(tblListaProductos.getSelectedRow());

        // Actualizamos el Calculo Total
        getCalculoTotalPro();
    }

    // Para Quitar - Producto
    private void menosProductoVenta(){
        // Variables Locales
        ProductoBean sqlBeanProducto=new ProductoBean();
        Vector productos=new Vector();
        int cantidad=0;
        Double precio=0.0;
        Double total=0.0;
        Double iva=0.0;
        Double subtotal=0.0;
        Double ivaCal=0.0;

        // Obtenemos los Datos del Producto
        // Seteamos los Datos
        sqlBeanProducto.setIdProducto(idProducto);
        productos=(new ProductoBLogic()).getDatosProductoVentaByIdProducto(sqlBeanProducto);
        sqlBeanProducto=(ProductoBean) productos.elementAt(0);

        // Evaluamos la Existencia del Producto
        if (Integer.parseInt(sqlBeanProducto.getMax())>=1){
            // Vaciamos los Datos
            // Precio
            precio=Double.parseDouble(sqlBeanProducto.getPrecioVenta());
            // Iva
            iva=Double.parseDouble(sqlBeanProducto.getIva());
            // Cantidad
            cantidad=Integer.parseInt(txtCantidad.getText());
            // Subtotal
            subtotal=round(precio*cantidad,2);
            // Iva Calculado
            ivaCal=round((precio*iva)*cantidad,2);
            // Total
            total=round(subtotal+ivaCal,2);
        }

        // Evaluamos que la Cantidad no sea Menor o Igual que Cero
        if (Integer.parseInt(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),4).toString())>1){
            // Actualizamos los Datos del Producto
            // Cantidad
            tblListaProductos.setValueAt(Integer.parseInt(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),4).toString())-cantidad,tblListaProductos.getSelectedRow(),4);
            // Subtotal
            tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),5).toString())-subtotal,2),tblListaProductos.getSelectedRow(),5);
            // Iva
            tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),6).toString())-ivaCal,2),tblListaProductos.getSelectedRow(),6);
            // Total
            tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),7).toString())-total,2),tblListaProductos.getSelectedRow(),7);
        }
        
        // Actualizamos el Calculo Total
        getCalculoTotalPro();

        // Limpiamos la Variables de Seleccion
        productoSel="-1";
    }

    // Para Agregar + Producto
    private void masProductoVenta(){
        // Variables Locales
        ProductoBean sqlBeanProducto=new ProductoBean();
        Vector productos=new Vector();
        int cantidad=0;
        Double precio=0.0;
        Double total=0.0;
        Double iva=0.0;
        Double subtotal=0.0;
        Double ivaCal=0.0;

        // Obtenemos los Datos del Producto
        // Seteamos los Datos
        sqlBeanProducto.setIdProducto(idProducto);
        productos=(new ProductoBLogic()).getDatosProductoVentaByIdProducto(sqlBeanProducto);
        sqlBeanProducto=(ProductoBean) productos.elementAt(0);

        // Evaluamos la Existencia del Producto
        if (Integer.parseInt(sqlBeanProducto.getMax())>=1){
            // Vaciamos los Datos
            // Precio
            precio=Double.parseDouble(sqlBeanProducto.getPrecioVenta());
            // Iva
            iva=Double.parseDouble(sqlBeanProducto.getIva());
            // Cantidad
            cantidad=Integer.parseInt(txtCantidad.getText());
            // Subtotal
            subtotal=round(precio*cantidad,2);
            // Iva Calculado
            ivaCal=round((precio*iva)*cantidad,2);
            // Total
            total=round(subtotal+ivaCal,2);
        }

        // Actualizamos los Datos del Producto
        // Cantidad
        tblListaProductos.setValueAt(Integer.parseInt(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),4).toString())+cantidad,tblListaProductos.getSelectedRow(),4);
        // Subtotal
        tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),5).toString())+subtotal,2),tblListaProductos.getSelectedRow(),5);
        // Iva
        tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),6).toString())+ivaCal,2),tblListaProductos.getSelectedRow(),6);
        // Total
        tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(tblListaProductos.getSelectedRow(),7).toString())+total,2),tblListaProductos.getSelectedRow(),7);

        // Actualizamos el Calculo Total
        getCalculoTotalPro();

        // Limpiamos la Variables de Seleccion
        productoSel="-1";
    }

    // Actualizamos Producto en la Venta (Producto Existente)
    private void actProductoVenta(int posicion){
        // Variables Locales
        ProductoBean sqlBeanProducto=new ProductoBean();
        Vector productos=new Vector();
        int cantidad=0;
        Double precio=0.0;
        Double total=0.0;
        Double iva=0.0;
        Double subtotal=0.0;
        Double ivaCal=0.0;

        // Obtenemos los Datos del Producto
        // Seteamos los Datos
        sqlBeanProducto.setIdProducto(idProducto);
        productos=(new ProductoBLogic()).getDatosProductoVentaByIdProducto(sqlBeanProducto);
        sqlBeanProducto=(ProductoBean) productos.elementAt(0);

        // Evaluamos la Existencia del Producto
        if (Integer.parseInt(sqlBeanProducto.getMax())>=1){
            // Vaciamos los Datos
            // Precio
            precio=Double.parseDouble(sqlBeanProducto.getPrecioVenta());
            // Iva
            iva=Double.parseDouble(sqlBeanProducto.getIva());
            // Cantidad
            cantidad=Integer.parseInt(txtCantidad.getText());
            // Subtotal
            subtotal=round(precio*cantidad,2);
            // Iva Calculado
            ivaCal=round((precio*iva)*cantidad,2);
            // Total
            total=round(subtotal+ivaCal,2);
        }


        // Actualizamos los Datos del Producto
        // Cantidad
        tblListaProductos.setValueAt(Integer.parseInt(tblListaProductos.getValueAt(posicion,4).toString())+cantidad,posicion,4);
        // Subtotal
        tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(posicion,5).toString())+subtotal,2),posicion,5);
        // Iva
        tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(posicion,6).toString())+ivaCal,2),posicion,6);
        // Total
        tblListaProductos.setValueAt(round(Double.parseDouble(tblListaProductos.getValueAt(posicion,7).toString())+total,2),posicion,7);

        // Actualizamos el Calculo Total
        getCalculoTotalPro();

        // Limpiamos los Campos de Registro
        txtCodigoBarra.setText("");
        txtCantidad.setText("1");
        // Movemos el Foco
        txtCodigoBarra.requestFocus();
    }

    // Agregamos Producto a la Venta (Producto no Existente)
    private void addProductoVenta(){
        // Variables Locales
        ProductoBean sqlBeanProducto=new ProductoBean();
        Vector productos=new Vector();
        int cantidad=0;
        Double precio=0.0;
        Double total=0.0;
        Double iva=0.0;
        Double subtotal=0.0;
        Double ivaCal=0.0;
        

        // Agregamos Productos a la Venta
        // Obtenemos los Datos del Producto
        // Seteamos los Datos
        sqlBeanProducto.setIdProducto(idProducto);
        productos=(new ProductoBLogic()).getDatosProductoVentaByIdProducto(sqlBeanProducto);
        sqlBeanProducto=(ProductoBean) productos.elementAt(0);

        // Evaluamos la Existencia del Producto
        if (Integer.parseInt(sqlBeanProducto.getMax())>=1){
            // Vaciamos los Datos
            // Precio
            precio=Double.parseDouble(sqlBeanProducto.getPrecioVenta());
            // Iva
            iva=Double.parseDouble(sqlBeanProducto.getIva());
            // Cantidad
            cantidad=Integer.parseInt(txtCantidad.getText());
            // Subtotal
            subtotal=round(precio*cantidad,2);
            // Iva Calculado
            ivaCal=round((precio*iva)*cantidad,2);
            // Total
            total=round(subtotal+ivaCal,2);

            // Agregamos el Producto a la Venta
            modelDetalleVentas.addRow(new Object[]{sqlBeanProducto.getClaveProducto(),sqlBeanProducto.getDesMarca(),sqlBeanProducto.getNombreProducto(),precio,cantidad,subtotal,ivaCal,total,sqlBeanProducto.getIdProducto()});
            // Actualizamos el Calculo Total
            getCalculoTotalPro();

            // Limpiamos los Campos de Registro
            txtCodigoBarra.setText("");
            txtCantidad.setText("1");
            // Movemos el Foco
            txtCodigoBarra.requestFocus();
        }else{
            // Mensaje al Usuario
            JOptionPane.showMessageDialog(null,"La cantidad seleccionada excede la existencia actual del producto, Verifique","Ventas",JOptionPane.INFORMATION_MESSAGE);
        }
    }

    // Obtenemos la Propiedad de Edicion de Columnas
    private TableCellEditor getEditableColumn(){
        // Variables Locales
        TableCellEditor editar=new TableCellEditor() {

            public boolean isCellEditable(EventObject anEvent) {
                return false;
            }

            public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            public Object getCellEditorValue() {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            public boolean shouldSelectCell(EventObject anEvent) {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            public boolean stopCellEditing() {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            public void cancelCellEditing() {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            public void addCellEditorListener(CellEditorListener l) {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            public void removeCellEditorListener(CellEditorListener l) {
                throw new UnsupportedOperationException("Not supported yet.");
            }
        };
        return editar;
    }

    // Obtenemos el Calculo Total de Productos
    private void getCalculoTotalPro(){
        // Variables Locales
        Double subtotal=0.0;
        Double iva=0.0;
        Double total=0.0;
        
        // Recorremos el Listado de Productos
        // Ciclo FOR
        for (int i=0;i<tblListaProductos.getRowCount();i++){
            // Sumamos el Subtotal
            subtotal=subtotal+Double.parseDouble(tblListaProductos.getValueAt(i, 5).toString());
            // Sumamos el Iva
            iva=iva+Double.parseDouble(tblListaProductos.getValueAt(i,6).toString());
            // Sumamos el Total
            total=total+Double.parseDouble(tblListaProductos.getValueAt(i,7).toString());
        }
        
        // Actualizamos los Campos
        txtSubtotal.setText(Double.toString(round(subtotal,2)));
        txtIVA.setText(Double.toString(round(iva,2)));
        txtTotal.setText(Double.toString(round(total,2)));
    }

    // Obtenemos el Redondeo de un Numero
    private double round(Double numero, int decimales){
        // Retornamos la Cantidad Redondeada
        return Math.round(numero*Math.pow(10,decimales))/Math.pow(10,decimales);
    }

    // Evalua si es Numerico
    private boolean isNumber(String valor){
        // Variables Locales
        int numero=0;
        // Convertimos el Valor
        try {
            // Numero
            numero=Integer.parseInt(valor);
            // Retornamos Respuesta
            return true;
        } catch (Exception e) {
            // Retornamos Respuesta
            return false;
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnAgregarCliente;
    private javax.swing.JButton btnBuscarCliente;
    private javax.swing.JButton btnCancelarVenta;
    private javax.swing.JButton btnRealizarVenta;
    private javax.swing.JButton btnSalir;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel17;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JComboBox jcbVendedor;
    private javax.swing.JTable tblListaProductos;
    private javax.swing.JTextField txtCantidad;
    private javax.swing.JTextField txtCodigoBarra;
    private javax.swing.JTextField txtIVA;
    private javax.swing.JTextField txtNoCliente;
    private javax.swing.JTextField txtNoFactura;
    private javax.swing.JTextField txtNoRemision;
    private javax.swing.JTextField txtNombreCliente;
    private javax.swing.JTextField txtSubtotal;
    private javax.swing.JTextField txtTotal;
    // End of variables declaration//GEN-END:variables

}
